/**
 * 菜单过滤工具
 * 统一处理菜单过滤逻辑，避免代码重复
 */

import { IMenuNode } from '@/types/common';

export type IMenuData = IMenuNode;

/**
 * 默认的过滤关键词配置
 */
export const DEFAULT_FILTER_KEYWORDS = [
  // 系统设置相关
  // '系统设置', 'System Settings', 
  // 系统监控相关（注意：不包含BMS Monitoring）
  '系统监控', 'System Monitoring', 
  // 日志管理相关
  '日志管理', 'Log Management', '日志', 'Log',
  // 权限管理相关
  '权限管理', 'Permission Management', '权限', 'Permission'
];

/**
 * 创建菜单过滤器
 * @param filterKeywords 过滤关键词数组
 * @returns 过滤函数
 */
export const createMenuFilter = (filterKeywords: string[] = DEFAULT_FILTER_KEYWORDS) => {
  return (menus: IMenuData[]): IMenuData[] => {
    return menus.filter(menu => {
      // 检查菜单标题是否包含需要过滤的关键词
      const title = menu.title || menu.meta?.title || menu.name || '';
      
      // 更精确的过滤条件，避免误过滤BMS Monitoring等业务菜单
      const shouldFilter = filterKeywords.some(keyword => {
        // 使用更精确的匹配逻辑
        const lowerTitle = title.toLowerCase();
        const lowerKeyword = keyword.toLowerCase();
        
        // 对于包含"Monitoring"的菜单，需要特殊处理
        if (lowerKeyword.includes('monitoring') && lowerTitle.includes('bms')) {
          return false; // BMS Monitoring 不应该被过滤
        }
        
        return lowerTitle.includes(lowerKeyword);
      });
      
      // 如果当前菜单需要过滤，直接返回false
      if (shouldFilter) {
        return false;
      }
      
      // 如果有子菜单，递归过滤子菜单
      if (menu.children && menu.children.length > 0) {
        menu.children = createMenuFilter(filterKeywords)(menu.children);
      }
      
      return true;
    });
  };
};

/**
 * 默认的菜单过滤器实例
 */
export const defaultMenuFilter = createMenuFilter();

/**
 * 过滤菜单数据（使用默认关键词）
 * @param menus 原始菜单数据
 * @returns 过滤后的菜单数据
 */
export const filterMenus = (menus: IMenuData[]): IMenuData[] => {
  return defaultMenuFilter(menus);
};

/**
 * 自定义关键词过滤菜单
 * @param menus 原始菜单数据
 * @param keywords 自定义过滤关键词
 * @returns 过滤后的菜单数据
 */
export const filterMenusWithKeywords = (menus: IMenuData[], keywords: string[]): IMenuData[] => {
  return createMenuFilter(keywords)(menus);
};
